public class Num982 {
    //给你一个整数数组 nums ，返回其中 按位与三元组 的数目。
    //按位与三元组 是由下标 (i, j, k) 组成的三元组，并满足下述全部条件：
    //0 <= i < nums.length
    //0 <= j < nums.length
    //0 <= k < nums.length
    //nums[i] & nums[j] & nums[k] == 0 ，其中 & 表示按位与运算符。
    public int countTriplets(int[] nums) {
        int count = 0;
        int[] arr = new int[1 << 16];
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[nums[i] & nums[j]] ++;
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < (1 << 16); j++) {
                if ((nums[i] & j) == 0) {
                    count += arr[j];
                }
            }
        }
        return count;
    }
}
